extends Node2D

var game_peer :ENetMultiplayerPeer
var login_recive_data :Array
var id :int
@onready var spawn = $MultiplayerSpawner


func _ready():
	game_peer = ENetMultiplayerPeer.new()
	$"../login/toy"._start_game.connect(start_game) #连接选择人物界面的开始游戏按钮发射的自定义信号
	spawn.spawn_function = Callable(self , "new_spawn_func") #重新定义玩家节点出生方法
	
func start_game():
	if multiplayer.is_server():  #用了反向判断，因为我不知道其他判断什么情况，默认都是服务器，所以一旦成为了
		var error = game_peer.create_client("127.0.0.1",9528)#客户端，就不会再重复创建客户端，有时候信号会发射好几次
		if error:
			$"../login/messbox".messbox("连接服务器失败：" + str(error))
		else :
			multiplayer.multiplayer_peer = game_peer  #客户端加入游戏，触发服务端信号，并将自己的ID传给服务端
			id = multiplayer.get_unique_id()

			multiplayer.server_disconnected.connect(_server_disconnected)
			multiplayer.connected_to_server.connect(_connected_to_server)
			



func _server_disconnected():
	game_peer.close()
	print("close")
	
func _connected_to_server():
	if login_recive_data.is_empty():
		return
	else:
		loading_map(login_recive_data)      #加载地图
		spawn_p.rpc_id(1,login_recive_data) #调用rpc，目标服务器，参数进入游戏玩家数组
		
		$"../login".queue_free()
		$"../loading".visible = true
		$"../loading".load_game(true)
		$".".visible = true
	

func new_spawn_func(data:Variant):
	if data.is_empty():
		return
	else :
		var p = load("res://tscn/players.tscn").instantiate()
		p.set_p_mod(data[1])
		p.named(data[0])
		p.position = data[3]
		p.name = str(id)
		return p

func loading_map(data :Array):
	if data[2] == "1":
		var map = load("res://tscn/map_1.tscn").instantiate()
		map.name = "1"
		$map.add_child(map)
		
func _process(delta):
	pass

@rpc("authority")
func spawn_p(data :Array):
	pass

@rpc("any_peer","call_local")
func _animation():
	if $"players".has_node(str(id)):
		var p = get_node("players/" + str(id))
		p.play_animation()
